home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / advc11.zip / STRING.C < prev    next >
C/C++ Source or Header  |  1987-02-09  |  5KB  |  239 lines

  1. int any2dec(str,radix)                /* convert string to integer */
  2.    char *str;
  3.    unsigned int radix;
  4. {
  5.    unsigned int digit, number = 0;
  6.    while (*str) {
  7.       if (isdigit(*str)) digit = *str - '0';
  8.       else if (islower(digit)) digit = *str - 'a' + 10;
  9.       else digit = *str - 'A' + 10;
  10.       number = number * radix + digit;
  11.       str++; }
  12.    return(number);
  13. }
  14.  
  15.  
  16.  
  17. unsigned char *bsqueeze(line)         /* squeeze blanks from a string */
  18.    unsigned char *line;
  19. {
  20.    static unsigned char sqbuf[126];
  21.    unsigned char *sqptr = sqbuf;
  22.    int repcnt = 0;
  23.  
  24.    while (*line) {
  25.       while(*line == ' ') {
  26.          line++;
  27.          repcnt++; }
  28.       if (repcnt == 2)
  29.          *sqptr++ = ' ' | 128;
  30.       else if (repcnt > 2) {
  31.          *sqptr++ = 128;
  32.          *sqptr++ = repcnt | 128; }
  33.       else if (repcnt) {
  34.          if (sqptr == &sqbuf[0])
  35.             *sqptr++ = ' ';
  36.          else *(sqptr - 1) += 128; }
  37.       repcnt = 0;
  38.       *sqptr++ = *line++; }
  39.    *sqptr = '\0';
  40.    return(&sqbuf[0]);
  41. }
  42.  
  43.  
  44.  
  45. unsigned char *bunsqueeze(line)       /* unsqueeze a blank-squeezed string */
  46.    unsigned char *line;
  47. {
  48.    static unsigned char usqbuf[126];
  49.    unsigned char *usqptr = usqbuf;
  50.    int repcnt = 0;
  51.  
  52.    while (*line) {
  53.       if (*line < 128)
  54.          *usqptr++ = *line;
  55.       else if (*line == 128) {
  56.          repcnt = *++line - 128;
  57.          while (repcnt--)
  58.              *usqptr++ = ' '; }
  59.       else {
  60.          *usqptr++ = *line - 128;
  61.          *usqptr++ = ' '; }
  62.       line++; }
  63.    *usqptr = '\0';
  64.    return(&usqbuf[0]);
  65. }
  66.  
  67.  
  68.  
  69. char *dec2any(number,radix)           /* convert integer to string */
  70.    unsigned int number, radix;
  71. {
  72.    static char buffer[64];      /* allow for up to 64-bit integers */
  73.    char *bufptr = buffer + 64;  /* point to end of buffer */
  74.    int digit;
  75.    *bufptr-- = '\0';
  76.    do {
  77.       digit = number % radix;
  78.       number /= radix;
  79.       *bufptr-- = (digit < 10) ? (digit + '0') : (digit + 'A' - 10); }
  80.    while (number);
  81.    return(++bufptr);
  82. }
  83.  
  84.  
  85.  
  86. char *extract(str,delim,element)    /* extract element from delimited string */
  87.    char *str, delim;
  88.    int element;
  89. {
  90.    static char elembuf[80];
  91.    char *elem = elembuf, *temp;
  92.  
  93.    temp = str;
  94.    while (*str && element)
  95.       if (*str++ == delim)
  96.          if (--element) temp = str;
  97.    if ((element == 1) && (*str == '\0') || (element == 0))
  98.       while (*temp && (*temp != delim))
  99.          *elem++ = *temp++;
  100.    *elem = '\0';
  101.    return(&elembuf[0]);
  102. }
  103.  
  104.  
  105.  
  106. char *locase(str)                     /* convert string to lowercase */
  107.    char *str;
  108. {
  109.    char *start;
  110.    start = str;
  111.    while (*str) {
  112.       if (isupper(*str))
  113.          *str = tolower(*str);
  114.       str++; }
  115.    return(start);
  116. }
  117.  
  118.  
  119.  
  120. char *multiand(str,c)                 /* AND string with a given value */
  121.    char *str, c;
  122. {
  123.    char *start;
  124.  
  125.    start = str;
  126.    while (*str)
  127.       *str++ &= c;
  128.    return(start);
  129. }
  130.  
  131.  
  132.  
  133. char *multior(str,c)                  /* OR string with a given value */
  134.    char *str, c;
  135. {
  136.    char *start;
  137.  
  138.    start = str;
  139.    while (*str)
  140.       *str++ |= c;
  141.    return(start);
  142. }
  143.  
  144.  
  145.  
  146. char *multixor(str,c)                 /* XOR string with a given value */
  147.    char *str, c;
  148. {
  149.    char *start;
  150.  
  151.    start = str;
  152.    while (*str)
  153.       *str++ ^= c;
  154.    return(start);
  155. }
  156.  
  157.  
  158.  
  159. char *reverse(str)                    /* reverse order of chrs in a string */
  160.    char *str;
  161. {
  162.    char *start, *end, tmp;
  163.    int length;
  164.  
  165.    end = str + (length = strlen(start = str)) -1;
  166.    length >>= 1;
  167.  
  168.    while (length--) {
  169.       tmp = *str;
  170.       *str++ = *end;
  171.       *end-- = tmp; }
  172.    return(start);
  173. }
  174.  
  175.  
  176.  
  177. char *soundex(str)                    /* get soundex code for a string */
  178.    char *str;
  179. {
  180.    static char soundexbuf[81];
  181.    char *table = "01230120022455012623010202";
  182.    char *sdx = soundexbuf, lastchr = ' ';
  183.  
  184.    while (*str) {
  185.       if (isalpha(*str) && (*str != lastchr)) {
  186.          *sdx = *(table + toupper(*str) - 'A');
  187.          if ((*sdx != '0') && (*sdx != lastchr))
  188.             lastchr = *sdx++; }
  189.       str++; }
  190.    *sdx = '\0';
  191.    return(&soundexbuf[0]);
  192. }
  193.  
  194.  
  195.  
  196. char *strip(str,c)                    /* strip a given chr from a string */
  197.    char *str, c;
  198. {
  199.    char *start, *newstr;
  200.  
  201.    start = newstr = str;
  202.    while (*str) {
  203.       if (*str != c)
  204.          *newstr++ = *str;
  205.       str++; }
  206.    *newstr = '\0';
  207.    return(start);
  208. }
  209.  
  210.  
  211.  
  212. char *striprange(str,clo,chi)         /* strip a range of chrs from a string */
  213.    char *str, clo, chi;
  214. {
  215.    char *start, *newstr;
  216.  
  217.    start = newstr = str;
  218.    while (*str) {
  219.       if ((*str > chi) | (*str < clo))
  220.          *newstr++ = *str;
  221.       str++; }
  222.    *newstr = '\0';
  223.    return(start);
  224. }
  225.  
  226.  
  227.  
  228. char *upcase(str)                     /* convert a string to uppercase */
  229.    char *str;
  230. {
  231.    char *start;
  232.    start = str;
  233.    while (*str) {
  234.       if (islower(*str))
  235.          *str = toupper(*str);
  236.       str++; }
  237.    return(start);
  238. }
  239.